module ctrl(
    input       [15:0]      t_data,
    input       [4:0]       sw,
    output  reg [23:0]      dis_data,
    output                  en,
    output                  dn
);
    reg         [3:0]       data_b;
    wire        [3:0]       data_b0001;     //小数点后四位
    wire        [3:0]       data_b001;      //小数点后三位
    wire        [3:0]       data_b01;       //小数点后第二位
    wire        [3:0]       data_b1;        //小数点后第一位
    wire        [3:0]       data_1;         //个位
    wire        [3:0]       data_10;        //十位
    wire        [3:0]       data_fu;        //符号位
    reg         [12:0]          pre;            //精度
//精度描述
always @(*) begin
    if(sw[4:3]==2'b11)begin
        pre <= 13'd625;
    end
    else if(sw[4:3]==2'b01)begin
        pre <= 13'd1250;
    end
    else if(sw[4:3]==2'b10)begin
        pre <= 13'd2500;
    end
    else if(sw[4:3]==2'b00)begin
        pre <= 13'd5000;
    end
    else begin
        pre <= pre;
    end
end

always @(*)begin        //小数位的处理
    case(sw[4:3])
        2'b11:data_b      = t_data[3:0];
        2'b01:data_b      = t_data[3:1];
        2'b10:data_b      = t_data[3:2];
        2'b00:data_b      = t_data[3:3];
        default:data_b      = 4'd12;
    endcase
end

    parameter   temp_max = 30,
                temp_min = 23;    

    assign      data_b0001      = (sw[4:3]==2'b11)                                      ? (data_b*pre%10)       : 4'd12;
    assign      data_b001       =((sw[4:3]==2'b11)||(sw[4:3]==2'b01))                   ? (data_b*pre/10%10)    : 4'd12;
    assign      data_b01        =((sw[4:3]==2'b11)||(sw[4:3]==2'b01)||(sw[4:3]==2'b10)) ? (data_b*pre/100%10)   : 4'd12;
    assign      data_b1         =data_b*pre/1000%10;
    assign      data_1          =t_data[10:4]%10;
    assign      data_10         =t_data[10:4]/10%10;
    assign      data_fu         =t_data[11] ? 4'hB : 4'hA;//数码管上A显示正号 B显示负号

always @(*)begin
    case(sw[2])
        1'b0:dis_data        ={data_10,data_1,data_b1,data_b01,data_b001,data_b0001};
        1'b1:dis_data        ={data_fu,data_10,data_1,data_b1,data_b01,data_b001};
        default:dis_data     ={data_fu,data_fu,data_fu,data_fu,data_fu,data_fu};
    endcase
end 

    assign      en=(data_1>=(temp_max%10)&&data_10>=(temp_max/10))?1'b1:1'b0;
    assign      dn=(data_1<=(temp_min%10)&&data_10<=(temp_min/10))?1'b1:1'b0;
















endmodule